﻿package CutLoad.mc
{
	import CutLoad.Base;
	import CutLoad.components.container.ContainerV;
	
	import flash.display.MovieClip;
	import flash.events.MouseEvent;


	/**
	 * 显示多行文字列表
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */	
	public class mcList extends Base
	{
		private var funClick:Function;
		private var classItem:Class;
		private var container:ContainerV;
		private var arrMcItem:Array;
		private var funUpdateOtherItem:Function;
		/**
		 *  初始化
		 * @param classItem 单行的类    关于它的说明：它是一个电影元件,需要几层,以下从上到下的图层顺序
		 * 1.显示文字的文本框:名称为txt  
		 * 2.鼠标放上去的状态,电影元件实例:名称为mc1   里面有两帧：第一帧：鼠标放上去的状态，第二帧：鼠标没有放上去的状态
		 * 3.背景偶行背景:电影元件实例:名称为 mcBak2  里面有两帧：第一帧：奇数行背景  第二帧：偶行背景
		 * @param funClick 点击时触发的方法  格式:function(data:Object)  data指的是单条记录所有的属性对象
		 * @param funUpdateOtherItem 如果单行元件里还需设置其它事情，可以转入一个函数，格式为：function(单行电影元件实例:MovieClip,当前行的数据:Object)
		 * 当初始化每一行，都会调用一次这个函数。
		 * 
		 */		
		public function mcList(classItem:Class,funClick:Function,funUpdateOtherItem:Function=null)
		{
			this.classItem=classItem;
			this.funClick=funClick;
			this.funUpdateOtherItem=funUpdateOtherItem;
		}
		/**
		 * 设置：点击时触发的方法  格式:function(data:Object)  data指的是单条记录所有的属性对象
		 * @param fun
		 * 
		 */		
		public function setFunClick(fun:Function):void{
			this.funClick=fun;
		}
		/**
		 * 清空列表 
		 * 
		 */		
		public function clearAll():void{
			if(container!=null){
				if(arrMcItem!=null){
					//如果不为空，去除事件
					for(var j:Number=0;j<arrMcItem.length;j++){
						var mcTem1:MovieClip=arrMcItem[j] as MovieClip;
						if(mcTem1.hasEventListener(MouseEvent.CLICK)){
							mcTem1.removeEventListener(MouseEvent.CLICK,FunMouseEvent);
							mcTem1.removeEventListener(MouseEvent.MOUSE_OVER,FunMouseEvent);
							mcTem1.removeEventListener(MouseEvent.MOUSE_OUT,FunMouseEvent);
						}
					}
				}
				if(container.parent==this) this.removeChild(container);
			}
		}
		/**
		 * 设置显示的数据 
		 * @param arr 数据，关于数据格式的说明：它是一个对象数组，每个对象必须包换title这个属性,好比下面的属性:
		 * [
		 * {title:asdfasd,.....},
		 * {title:asdfasd,.....},
		 * {title:asdfasd,.....}
		 * ...
		 * ]
		 * @return 
		 * 
		 */		
		public function update(arr:Array):void{
			clearAll();
			arrMcItem=new Array();
			container=new ContainerV();
			container.init({w:5,h:5,isAuto:false,xspace:5,yspace:5});
			for(var i:Number=0;i<arr.length;i++){
				var mcItem:Base=createOneItem();
				var mcTem:MovieClip=mcItem.getOtherInfo().mc;
				if(funUpdateOtherItem!=null) this.funUpdateOtherItem(mcTem,arr[i]);
				mcTem.txt.text=arr[i].title;
				mcTem.cutload_mcList_data=arr[i];
				mcTem.addEventListener(MouseEvent.CLICK,FunMouseEvent);
				mcTem.addEventListener(MouseEvent.MOUSE_OVER,FunMouseEvent);
				mcTem.addEventListener(MouseEvent.MOUSE_OUT,FunMouseEvent);
				arrMcItem.push(mcTem);
				//奇偶行
				if(i%2==0){
					mcTem["mcBak2"].gotoAndStop(1);
				}else{	
					mcTem["mcBak2"].gotoAndStop(2);
				}
				container.append(mcItem,false);
			}
			container.setTakeWH();
			container.show(this);
		}
		//新建一个元素
		private function createOneItem():Base{
			var mc:MovieClip=new classItem() as MovieClip;
			mc.mouseChildren=false;
			mc.buttonMode=true;
			mc["txt"].text="loading..";
			mc["mc1"].gotoAndStop(2);
			mc["mcBak2"].gotoAndStop(1);
			var itemBase:Base=Base.getBase(mc);
			itemBase.setOtherInfo({mc:mc});
			return itemBase;
		}
		//
		private function FunMouseEvent(e:MouseEvent):void{
			var mcTem:MovieClip=e.target as MovieClip;
			if(e.type==MouseEvent.CLICK){
				if(funClick!=null){
					this.funClick(mcTem.cutload_mcList_data);
				}
			}else if(e.type==MouseEvent.MOUSE_OVER){
				mcTem["mc1"].gotoAndStop(1);
			}else if(e.type==MouseEvent.MOUSE_OUT){
				mcTem["mc1"].gotoAndStop(2);
			}
		}
	}
}